# 导入工具包
import cv2, myutils

# 绘图展示
def cv_show(name,img):
	cv2.imshow(name, img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()
    
def get_digits(path):    
    # 1. 读取一个模板图像
    img = cv2.imread(path)
    #cv_show('img',img)
    # 2. 灰度图
    ref = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #cv_show('ref',ref)
    # 3. 二值图像
    ref = cv2.threshold(ref, 10, 255, cv2.THRESH_BINARY_INV)[1]
    #cv_show('ref',ref)    

    # 4. 计算轮廓
    #cv2.findContours()函数接受的参数为二值图，即黑白的（不是灰度图）,
    # cv2.RETR_EXTERNAL只检测外轮廓，
    # cv2.CHAIN_APPROX_SIMPLE只保留终点坐标
    # 返回的list中每个元素都是图像中的一个轮廓
    refCnts, hierarchy = cv2.findContours(ref.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cv2.drawContours(img,refCnts,-1,(0,0,255),3) 
    # cv_show('img',img)
    #print (np.array(refCnts).shape)
    refCnts = myutils.sort_contours(refCnts, method="left-to-right")[0] #排序，从左到右，从上到下
    digits = {}

    # 5. 遍历每一个轮廓
    for (i, c) in enumerate(refCnts):
        # 计算外接矩形并且resize成合适大小
        (x, y, w, h) = cv2.boundingRect(c)
        roi = ref[y:y + h, x:x + w]
        roi = cv2.resize(roi, (57, 88))

        # 每一个数字对应每一个模板
        digits[i] = roi
    return digits
'''
import os
dir = os.path.dirname(os.path.abspath(__file__))
template_path = os.path.join(dir, "images/ocr_a_reference.png")
print(template_path)
print(cv2.__version__)
digits = get_digits(template_path)
for k,v in digits.items():
    print(f"{k};{v}")
'''